package geon.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import geon.model.Pais;

public class DaoPais implements Dao<Pais> {
	
	private DaoGenerico dao;
	private String sql;

	public DaoPais() {
		dao = new DaoGenerico();
	}

	@Override
	public Integer add(Pais o) throws SQLException {
		try {
			dao.begin();
			sql = "Insert Into TbPais (PaiCodigo, PaiNome, PaiIso2, PaiIso3) Values (?, ?, ?, ?)";
			o.setCodigo(dao.getNextId("TbPais", "PaiCodigo"));
			dao.executeCommand(sql, o.getCodigo(), o.getNome(), o.getIso2(), o.getIso3());
			dao.commit();
		} catch (Exception e) {
			Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e);
			dao.rollback();
		}
		return o.getCodigo();
	}

	@Override
	public void upd(Pais o) throws SQLException {
		try {
			dao.begin();
			sql = "Update TbPais Set PaiNome = ?, PaiIso2 = ?, PaiIso3 = ? Where PaiCodigo = ?";
			dao.executeCommand(sql, o.getNome(), o.getIso2(), o.getIso3(), o.getCodigo());
			dao.commit();
		} catch (Exception e) {
			Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e);
			dao.rollback();
		}
	}

	@Override
	public void del(int codigo) throws SQLException {
		try {
			dao.begin();
			sql = "Delete From TbPais Where PaiCodigo = ?";
			dao.executeCommand(sql, codigo);
			dao.commit();
		} catch (Exception e) {
			Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e);
			dao.rollback();
		}
	}

	@Override
	public Pais set(ResultSet rs) throws SQLException {
		Pais pais = new Pais();
		pais.setCodigo(rs.getInt("PaiCodigo"));
		pais.setNome(rs.getString("PaiNome"));
		pais.setIso2(rs.getString("PaiIso2"));
		pais.setIso3(rs.getString("PaiIso3"));
		return pais;
	}

	@Override
	public Pais get(int codigo) throws SQLException {
		Pais pais = null;
		sql = "Select PaiCodigo, PaiNome, PaiIso2, PaiIso3 From TbPais Where PaiCodigo = ?";
		ResultSet rs = dao.executeQuery(sql, codigo);
		if (rs.next()) {
			pais = set(rs);
		}
		rs.close();
		return pais;
	}

	@Override
	public Pais get(Object param) throws SQLException {
		Pais pais = null;
		sql = "Select PaiCodigo, PaiNome, PaiIso2, PaiIso3 From TbPais Where PaiIso2 = ?";
		ResultSet rs = dao.executeQuery(sql, param);
		if (rs.next()) {
			pais = set(rs);
		}
		rs.close();
		return pais;
	}

	@Override
	public List<Pais> list() throws SQLException {
		List<Pais> paises = new LinkedList<Pais>();
		sql = "Select PaiCodigo, PaiNome, PaiIso2, PaiIso3 From TbPais";
		ResultSet rs = dao.executeQuery(sql);
		while (rs.next()) {
			paises.add(set(rs));
		}
		rs.close();
		return paises;
	}

	@Override
	public List<Pais> list(Object... params) throws SQLException {
		List<Pais> paises = new LinkedList<Pais>();
		sql = "Select PaiCodigo, PaiNome, PaiIso2, PaiIso3 From TbPais Where PaiNome Like ?";
		ResultSet rs = dao.executeQuery(sql, "%" + params[0] + "%");
		while (rs.next()) {
			paises.add(set(rs));
		}
		rs.close();
		return paises;
	}

}
